/**
 * 
 */
package com.moli.iov.protocol.codec;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT;

/**
 * 序列化
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Serialize {
	/**
	 * 是否大端字节序（默认为true）
	 * @return
	 */
	boolean isBigEndian() default true;
	/**
	 * 有符号类型 1:有符号，0无符号
	 * 
	 * 默认无符号
	 * 
	 * @return
	 */
	int sign() default 0;
	
	/**
	 * 是否对Field进行排序
	 * @return
	 */
	boolean isSort() default false;
	
	/**
	 * field在编码顺序 1,2,3.... 
	 * 必须isSort=true才有效
	 * 若 类isSort=true 且字段 sort!=-1则编码器按照sort排序和size进行字节序拼接编码
	 * @return
	 */
	int sort() default -1;

	/**
	 * 单位(默认为byte)
	 * @return
	 */
	String unit() default "byte";

	/**
	 * 偏移量
	 * @return
	 * 
	 */
	int offset() default 0;

	/**
	 * 长度(-1:从偏移量开始至数据的末位)
	 * @return
	 */
	int size() default -1;
	
	/**
	 * 数值偏移量（先计算系数，再计算偏移量）
	 * @return
	 */
	double valOffset() default 0;
	
	/**
	 * 系数（先计算系数，再计算偏移量）
	 * @return
	 */
	double coefficient() default 1.0;
	
	/**
	 * 限制最小值（计算后）
	 * @return
	 */
	double min() default Long.MIN_VALUE;
	
	/**
	 * 限制最大值（计算后）
	 * @return
	 */
	double max() default Long.MAX_VALUE;
	
	/**
	 * 编码格式 默认utf-8
	 * @return
	 */
	String charset() default "utf-8";
	
	/**
	 * 按该长度解析
	 * @return
	 */
	int parseSize() default -1;
	
	/**
	 * 精度-保留有效位数
	 * @return
	 */
	int precision() default 2; 
	
	/**
	 * 上报数据是fe，解析为异常
	 * 
	 * @return
	 */
	double exception() default -98;
	
	/**
	 * 上报数据为ff，解析为无效
	 * 
	 * @return
	 */
	double invalid() default -99;
}